package cn.tedu.truetaste.service.impl;

import cn.tedu.truetaste.ex.ServiceException;
import cn.tedu.truetaste.mapper.WxuserInfoMapper;
import cn.tedu.truetaste.pojo.dto.WxuserInfoAddNewDTO;
import cn.tedu.truetaste.pojo.dto.WxuserInfoUpdateDTO;
import cn.tedu.truetaste.pojo.entity.WxuserInfo;
import cn.tedu.truetaste.pojo.vo.WxuserInfoListItemVO;
import cn.tedu.truetaste.pojo.vo.WxuserInfoStandardVO;
import cn.tedu.truetaste.service.IWxuserInfoService;
import cn.tedu.truetaste.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 处理用户业务的实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Service
public class WxuserInfoServiceImpl implements IWxuserInfoService {

    @Autowired
    private WxuserInfoMapper wxuserInfoMapper;

    public WxuserInfoServiceImpl() {
        log.info("创建业务对象：WxuserInfoServiceImpl");
    }

    @Override
    public void addNew(WxuserInfoAddNewDTO wxuserInfoAddNewDTO) {
        log.debug("开始处理【添加用户详情信息】的业务，参数：{}", wxuserInfoAddNewDTO);

        WxuserInfo wxuserInfo = new WxuserInfo();
        // 复制参数DTO对象中的属性到实体对象中
        BeanUtils.copyProperties(wxuserInfoAddNewDTO, wxuserInfo);
        wxuserInfo.setNickname("微信用户");
        int rows = wxuserInfoMapper.insert(wxuserInfo);
        if (rows != 1) {
            String message = "添加用户详情失败，服务器忙，请稍后再尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    @Override
    public void updateInfoById(String openId, WxuserInfoUpdateDTO wxuserInfoUpdateDTO) {
        log.debug("开始处理【修改用户详情】的业务，参数ID：{}，新数据：{}",openId, wxuserInfoUpdateDTO);

        {
            // 调用Mapper的getStandardById()执行查询，检查数据是否不存在
            WxuserInfoStandardVO wxuserInfoStandardVO = wxuserInfoMapper.getStandardByOpenId(openId);
            //UserStandardVO userStandardVO = userMapper.getStandardByOpenId(openId);
            System.out.println("---"+wxuserInfoStandardVO);
            // 是：数据不存在，抛出异常
            if (wxuserInfoStandardVO == null) {
                String message = "修改用户详情失败，尝试访问的数据不存在！";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
            }
        }

        WxuserInfo wxuserInfo = new WxuserInfo();
        // 将参数对象的属性值复制到以上新创建的wxuserInfo对象中
        BeanUtils.copyProperties(wxuserInfoUpdateDTO, wxuserInfo);
        //wxuserInfo.setId(openId);
        log.debug("即将执行修改数据，参数：{}", wxuserInfo);
        int rows = wxuserInfoMapper.update(wxuserInfo);
        if (rows != 1) {
            String message = "修改用户详情数据失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE, message);
        }
    }

    @Override
    public WxuserInfoStandardVO getStandardByOpenId(String openId) {
        log.debug("开始处理【根据openId查询用户详情】的业务，参数：{}", openId);

        // 调用Mapper的getStandardByOpenId()执行查询
        WxuserInfoStandardVO wxuserInfoStandardVO = wxuserInfoMapper.getStandardByOpenId(openId);
        // 判断查询结果是否为null
        // 是：没有匹配的数据，抛出异常（NOT_FOUND）
        if (wxuserInfoStandardVO == null) {
            String message = "查询用户详情失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        log.debug("即将返回查询结果：{}", wxuserInfoStandardVO);
        return wxuserInfoStandardVO;
    }

    @Override
    public List<WxuserInfoListItemVO> list() {
        log.debug("开始处理【查询用户详情列表】的业务，参数：无");
        List<WxuserInfoListItemVO> list = wxuserInfoMapper.list();
        return list;
    }
}
